#include<stdio.h>

int main()
{

    //指针:特殊的数据类型  数据类型*
    //指针内部存放的是内存的地址 
    // & ： 取地址符号
    // * : 取值符号
    // int a=10;
    // int* p=&a;    //p里面存着a的地址
    // //printf("%d\n",*p);
    // printf("%ld\n",sizeof(p));   //8个字节
    // //%p:以地址形式输出一个整数值
    // //0x:代表十六进制
    // printf("%p\n",p);  //地址：本质上就是整数值，代表的是内存的编号
    // //指针：无符号长整型数据

    // // *p = 20;   // 把*p那块内存的值改成20
    // p = 20;  //把p里面的地址改成20    野指针：指向非法内存
    // printf("%d",*p);   //段错误：内存错误：访问了非法内存
    // //非法内存：不存在的内存或者已经被释放的内存

    // //指针定义时一定要进行初始化   NULL：空指针
    // int *p2 = NULL;
    int a = 10;
    int *p = &a;
    //*p = 2;
    //printf("%d\n",a);

    //二级指针 : 存储了指针变量地址的指针变量
    int **p2 = &p;
    // p2 : p的地址
    // *p2 : p的值（a的地址）
    //  **P2 : a的值
    printf("%d\n",**p2);

    return 0;
}